package sebastiankerckhof.scene.geometry;

import sebastiankerckhof.math.Matrix4f;
import sebastiankerckhof.render.raytrace.Ray;
import sebastiankerckhof.render.raytrace.Hit.Hit;
import sebastiankerckhof.scene.material.Material;
import sebastiankerckhof.scene.texture.Texture;
import sebastiankerckhof.scene.transformation.TransformationStack;

public interface Surface {
	
	public void setMaterial(Material m);
	public void setTexture(Texture t);
	
	public Material getMaterial();
	public Texture getTexture();
	public void setMotion(TransformationStack t);
	
	public void transformToStep(float step);
	public void transformFromStep(float step);
	
	public void transform(Matrix4f M, Matrix4f N);
	
	public boolean hit(Ray r, float t0, Hit h);
	public BBox getBBox();
	public float getMidPoint(int axis);
	

}
